package body Udvar_Pkg is
   package body Functions is
   procedure Felvetel(U: in out Baromfi_Udvar; A: in Allat) is
      L : Boolean := False;
      i : Index_Type;
   begin
      if U.Aktualis<=Befogado_Kepesseg then 
         U.Allatok(U.Aktualis):=A;
       
         i:=U.Aktualis;
         while (I in U.Aktualis..Index_Type'First and not L)  loop
            if u.allatok(i).fajta=u.allatok(u.aktualis).fajta then
               L:=U.Allatok(u.aktualis)<U.Allatok(i);
            end if;
         end loop;
         U.Aktualis:=Index_Type'Succ(U.Aktualis);   

      end if;
   end Felvetel;
      
   function Darabszam(U: Baromfi_Udvar; A: Haziallatok) return Natural is
      d : Natural:=0;
   begin
      for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
         if U.Allatok(I).Fajta=A then
            D:=D+1;
         end if;
      end loop;
      return d;
   end Darabszam;
            
   function Allatfajtak(U: Baromfi_Udvar; A: Haziallatok) return Tomb is
      result: Tomb(index_Type'First..U.Aktualis);
      index: Index_Type:=Index_Type'First;
   begin
      for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
         if U.Allatok(I).Fajta=A then 
            Result(Index):=U.Allatok(I);
            Index:=Index_Type'Succ(Index);
         end if;
      end loop;    
      return result(index_Type'First..INdex_Type'Pred(index));
   end Allatfajtak;
   
   procedure Eladas(U: in out Baromfi_Udvar; A: in Haziallatok) is
      udvar: Baromfi_Udvar;
   begin
      for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
         if U.Allatok(I).Fajta/=A then
            Felvetel(Udvar, U.Allatok(I));
         end if;
      end loop;
      u:=udvar;
   end Eladas;

   procedure Levagas(U: in out Baromfi_Udvar; A: in Allat) is
      I: Index_Type:=Index_Type'First;
      l : Boolean:=false;
   begin
      while (i in index_Type'First..Index_Type'Pred(u.aktualis) and not L) loop
         L:=A=U.Allatok(I);
         if L=True then
            U.Allatok(I):=U.Allatok(Index_Type'Pred(U.Aktualis));
            U.Aktualis:=Index_Type'Pred(U.Aktualis);
         end if;
         I:=Index_Type'Succ(I);
      end loop;
   end Levagas;

   function Nyereseg(U: Baromfi_Udvar) return Float is
      profit: Float:=0.0;
   begin
      for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
         declare 
            Napi_Haszon: Float:=0.0;
         begin
            napi_haszon:=u.allatok(i).napi_ar;
            case U.Allatok(I).Fajta is
               when Tyuk => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Napi_Tojasok_Szama);       
               when Nyul => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Szaporulat_Szama);
               when Kecske|Marha => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Tej);
               when Diszno => Napi_Haszon:=Napi_Haszon* Float(U.Allatok(I).Napi_Hizas);
               when Lo => Napi_Haszon:=Napi_Haszon*Float(U.Allatok(I).Teherbiras);
            end case;
            profit:=profit+napi_haszon*u.allatok(i).napi_szorzo**7;
         end;
      end loop;
      return profit;
   end Nyereseg;
       
   function Ertek_Novekedes(u: Baromfi_Udvar; A: in Haziallatok) return Float is
      profit: Float:=0.0;
   begin
      for I in index_Type'First..Index_Type'Pred(u.aktualis) loop
         if U.Allatok(I).fajta=A then
            declare 
               Napi_Haszon: Float:=0.0;
            begin
               napi_haszon:=u.allatok(i).napi_ar;
               case U.Allatok(I).Fajta is
                  when Tyuk => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Napi_Tojasok_Szama);       
                  when Nyul => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Szaporulat_Szama);
                  when Kecske|Marha => Napi_Haszon:=Napi_Haszon * Float(U.Allatok(I).Tej);
                  when Diszno => Napi_Haszon:=Napi_Haszon* Float(U.Allatok(I).Napi_Hizas);
                  when Lo => Napi_Haszon:=Napi_Haszon*Float(U.Allatok(I).Teherbiras);
               end case;
               profit:=profit+napi_haszon*u.allatok(i).napi_szorzo;
            end;
         end if;
      end loop;
      return profit;
   end Ertek_Novekedes;
 
   end Functions;
end Udvar_Pkg;
